package cn.com.oidreams.common.utils;

/***
 ** @category 请用一句话描述这个类的用途
 ** @author qing.yunhui
 ** @email: qingyh@glodon.com
 ** @createTime: 2020-11-19 16:49
 **/

import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;

public class StringUtil {

    /**
     * 是否包含字母
     * @param str
     * @return
     */
    public static boolean containLetter(String str) {
        if (null == str || str.isEmpty()) {
            return false;
        }
        char[] chars = str.toCharArray();
        for (char c : chars) {
            boolean isLetter = isLetter(c);
            if (isLetter) {
                return true;
            }
        }
        return false;
    }
    /**
     * 是否字母
     * @param c
     * @return
     */
    public static boolean isLetter(char c) {
        return Character.isLetter(c);
    }

    /**
     * 是否小写字母
     * @param c
     * @return
     */
    public static boolean isLowerCase(char c) {
        return Character.isLowerCase(c);
    }

    /**
     * 是否英文字母（大写或小写）
     * @param c
     * @return
     */
    public static boolean isLowerOrUpperCase(char c) {
        return Character.isLowerCase(c) || Character.isUpperCase(c);
    }

    /**
     * 是否大写字母
     * @param c
     * @return
     */
    public static boolean isUpperCase(char c) {
        return Character.isUpperCase(c);
    }

    public static boolean isBlank(String str) {
        int length;
        if ((str == null) || ((length = str.length()) == 0)) {
            return true;
        }
        for (int i = 0; i < length; i++) {
            if (!Character.isWhitespace(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }
    /**
     * <p>判断给定的字符判断是否为null或空</p>
     * @param objects
     * @return  boolean
     * */
    public static boolean isEmptys(Object...objects){
        if(null==objects || objects.length<1){
            return true;
        }
        for(Object obj:objects){
            boolean isEmpty=isEmpty(obj);
            if(isEmpty) {return true;}
        }
        return false;
    }

    public static boolean isNotEmptys(Object obj){
        return !isEmpty(obj);
    }

    /**
     * <p>判断给定的字符是否为null或空</p>
     * @param obj
     * @return boolean
     * */
    @SuppressWarnings("rawtypes")
    public static boolean isEmpty(Object obj){
        if(null==obj){
            return true;
        }
        if(obj instanceof Map){
            if(((Map)obj).isEmpty()){
                return true;
            }
        }else if(obj instanceof Collection){
            if(((Collection)obj).isEmpty()){
                return true;
            }
        }
        else if(obj instanceof String){
            if(((String)obj).trim().length()==0){
                return true;
            }
            if("[]".equals(obj)){
                return true;
            }
        }else if(obj.getClass().isArray()){
            if(Array.getLength(obj)==0){
                return true;
            }
        }else{
            return false;
        }
        return false;
    }

    /***
     * 首字母转换
     * @param str 待转换的字符
     * @param isUpper true:首字母转换大写 , false:首字母转换小写
     * @return 转换后的字符
     * **/
    public static String firstLetterConvert(String str,boolean isUpper) {
        StringBuffer buff = new StringBuffer(str);
        buff.replace(0, 1, String.valueOf(isUpper?Character.toUpperCase(str.charAt(0)):Character.toLowerCase(str.charAt(0))));
        return buff.toString();
    }

    /**
     * <p>从指定最后符号位置开始截取字符</p>
     * @param str 待截取的字符串
     * @param lastIndexOf 截取位置(字符最后符号位)
     * */
    public static String truncateStrLastIndexOf(String str,String lastIndexOf){
        int lastIndex=str.lastIndexOf(lastIndexOf);
        return str.substring(lastIndex+1);
    }

    /**
     * <p>把给定字符串str根据给定条件显示前N位，后N位，其余的用symbol替换</p>
     * @param str 待处理的字符串
     * @param showTop 显示前N位
     * @param showLast 显示后N位
     * @param symbol   用作替换的符号
     * */
    public static String replaceStrBy(String str,int showTop,int showLast,String symbol){
        if(StringUtil.isEmptys(str,symbol)){return str;}
        if(showTop>=str.length()||showLast>=str.length()){return str;}
        if(showTop+showLast>=str.length()){return str;}
        int count=str.length()-(showTop+showLast);
        StringBuffer sb=new StringBuffer(str);
        StringBuffer symbolSb=new StringBuffer();
        for(int i=0;i<count;i++){
            symbolSb.append(symbol);
        }
        return sb.replace(showTop,str.length()-showLast,symbolSb.toString()).toString();
    }
}
